home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 14 / CU Amiga Magazine's Super CD-ROM 14 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-09].iso / CUCD / Programming / Mesa-2.2 / src / api2.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-06-25  |  34.8 KB  |  1,659 lines

  1. /* $Id: api.c,v 1.4 1996/09/27 01:23:50 brianp Exp $ */
  2.  
  3. /*
  4.  * Mesa 3-D graphics library
  5.  * Version:  2.0
  6.  * Copyright (C) 1995-1996  Brian Paul
  7.  *
  8.  * This library is free software; you can redistribute it and/or
  9.  * modify it under the terms of the GNU Library General Public
  10.  * License as published by the Free Software Foundation; either
  11.  * version 2 of the License, or (at your option) any later version.
  12.  *
  13.  * This library is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16.  * Library General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU Library General Public
  19.  * License along with this library; if not, write to the Free
  20.  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  */
  22.  
  23.  
  24. /*
  25.  * $Log: api.c,v $
  26.  * Revision 1.4  1996/09/27 01:23:50  brianp
  27.  * added extra error checking when DEBUG is defined
  28.  *
  29.  * Revision 1.3  1996/09/26 22:52:12  brianp
  30.  * added glInterleavedArrays
  31.  *
  32.  * Revision 1.2  1996/09/14 06:27:22  brianp
  33.  * some functions didn't return needed values
  34.  *
  35.  * Revision 1.1  1996/09/13 01:38:16  brianp
  36.  * Initial revision
  37.  *
  38.  */
  39.  
  40.  
  41. #include <stdlib.h>
  42. #include <stdio.h>
  43. #include "bitmap.h"
  44. #include "context.h"
  45. #include "eval.h"
  46. #include "image.h"
  47. #include "macros.h"
  48. #include "matrix.h"
  49. #include "teximage.h"
  50. #include "types.h"
  51.  
  52.  
  53.  
  54. #ifdef MULTI_THREADING
  55.  
  56. /* Get the context associated with the calling thread */
  57. #define GET_CONTEXT    GLcontext* ctx = gl_get_thread_context()
  58.  
  59. #else
  60.  
  61. #ifdef DEBUG
  62. #define GET_CONTEXT                            \
  63.     printf("GL Command executed 1:%s\n",__FUNC__);    \
  64.     if (!CC) {                                    \
  65.        fprintf(stderr,"Mesa error:  no rendering context!\n");    \
  66.        abort();                                    \
  67.     }
  68.  
  69. #else
  70. /* CC is a global pointer for all threads in the address space */
  71. #define GET_CONTEXT
  72. #endif /*DEBUG*/
  73.  
  74. #endif /*MULTI_THREADED*/
  75.  
  76.  
  77.  
  78. #define SHORTCUT
  79.  
  80. void glNewList( GLuint list, GLenum mode )
  81. {
  82.    GET_CONTEXT;
  83.    (*CC->API.NewList)(CC, list, mode);
  84. }
  85.  
  86. void glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz )
  87. {
  88.    GET_CONTEXT;
  89.    (*CC->API.Normal3f)( CC, BYTE_TO_FLOAT(nx),
  90.                              BYTE_TO_FLOAT(ny), BYTE_TO_FLOAT(nz) );
  91. }
  92.  
  93.  
  94. void glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz )
  95. {
  96.    GLfloat fx, fy, fz;
  97.    GET_CONTEXT;
  98.    if (ABSD(nx)<0.00001)   fx = 0.0F;   else  fx = nx;
  99.    if (ABSD(ny)<0.00001)   fy = 0.0F;   else  fy = ny;
  100.    if (ABSD(nz)<0.00001)   fz = 0.0F;   else  fz = nz;
  101.    (*CC->API.Normal3f)( CC, fx, fy, fz );
  102. }
  103.  
  104.  
  105. void glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz )
  106. {
  107.    GET_CONTEXT;
  108. #ifdef SHORTCUT
  109.         if (CC->CompileFlag) {
  110.            (*CC->Save.Normal3f)( CC, nx, ny, nz );
  111.            if (CC->ExecuteFlag) {
  112.               CC->Current.Normal[0] = nx;
  113.               CC->Current.Normal[1] = ny;
  114.               CC->Current.Normal[2] = nz;
  115.            }
  116.         }
  117.         else {
  118.            /* Execute */
  119.            CC->Current.Normal[0] = nx;
  120.            CC->Current.Normal[1] = ny;
  121.            CC->Current.Normal[2] = nz;
  122.         }
  123. #else
  124.    (*CC->API.Normal3f)( CC, nx, ny, nz );
  125. #endif
  126. }
  127.  
  128.  
  129. void glNormal3i( GLint nx, GLint ny, GLint nz )
  130. {
  131.    GET_CONTEXT;
  132.    (*CC->API.Normal3f)( CC, INT_TO_FLOAT(nx),
  133.                              INT_TO_FLOAT(ny), INT_TO_FLOAT(nz) );
  134. }
  135.  
  136.  
  137. void glNormal3s( GLshort nx, GLshort ny, GLshort nz )
  138. {
  139.    GET_CONTEXT;
  140.    (*CC->API.Normal3f)( CC, SHORT_TO_FLOAT(nx),
  141.                              SHORT_TO_FLOAT(ny), SHORT_TO_FLOAT(nz) );
  142. }
  143.  
  144.  
  145. void glNormal3bv( const GLbyte *v )
  146. {
  147.    GET_CONTEXT;
  148.    (*CC->API.Normal3f)( CC, BYTE_TO_FLOAT(v[0]),
  149.                              BYTE_TO_FLOAT(v[1]), BYTE_TO_FLOAT(v[2]) );
  150. }
  151.  
  152.  
  153. void glNormal3dv( const GLdouble *v )
  154. {
  155.    GLfloat fx, fy, fz;
  156.    GET_CONTEXT;
  157.    if (ABSD(v[0])<0.00001)   fx = 0.0F;   else  fx = v[0];
  158.    if (ABSD(v[1])<0.00001)   fy = 0.0F;   else  fy = v[1];
  159.    if (ABSD(v[2])<0.00001)   fz = 0.0F;   else  fz = v[2];
  160.    (*CC->API.Normal3f)( CC, fx, fy, fz );
  161. }
  162.  
  163.  
  164. void glNormal3fv( const GLfloat *v )
  165. {
  166.    GET_CONTEXT;
  167. #ifdef SHORTCUT
  168.         if (CC->CompileFlag) {
  169.            (*CC->Save.Normal3fv)( CC, v );
  170.            if (CC->ExecuteFlag) {
  171.               CC->Current.Normal[0] = v[0];
  172.               CC->Current.Normal[1] = v[1];
  173.               CC->Current.Normal[2] = v[2];
  174.            }
  175.         }
  176.         else {
  177.            /* Execute */
  178.            GLfloat *n = CC->Current.Normal;
  179.            n[0] = v[0];
  180.            n[1] = v[1];
  181.            n[2] = v[2];
  182.         }
  183. #else
  184.    (*CC->API.Normal3fv)( CC, v );
  185. #endif
  186. }
  187.  
  188.  
  189. void glNormal3iv( const GLint *v )
  190. {
  191.    GET_CONTEXT;
  192.    (*CC->API.Normal3f)( CC, INT_TO_FLOAT(v[0]),
  193.                              INT_TO_FLOAT(v[1]), INT_TO_FLOAT(v[2]) );
  194. }
  195.  
  196.  
  197. void glNormal3sv( const GLshort *v )
  198. {
  199.    GET_CONTEXT;
  200.    (*CC->API.Normal3f)( CC, SHORT_TO_FLOAT(v[0]),
  201.                              SHORT_TO_FLOAT(v[1]), SHORT_TO_FLOAT(v[2]) );
  202. }
  203.  
  204.  
  205. void glNormalPointer( GLenum type, GLsizei stride, const GLvoid *ptr )
  206. {
  207.    GET_CONTEXT;
  208.    (*CC->API.NormalPointer)(CC, type, stride, ptr);
  209. }
  210.  
  211.  
  212. void glOrtho( GLdouble left, GLdouble right,
  213.               GLdouble bottom, GLdouble top,
  214.               GLdouble nearval, GLdouble farval )
  215. {
  216.    GLfloat x, y, z;
  217.    GLfloat tx, ty, tz;
  218.    GLfloat m[16];
  219.    GET_CONTEXT;
  220.  
  221.    x = 2.0 / (right-left);
  222.    y = 2.0 / (top-bottom);
  223.    z = -2.0 / (farval-nearval);
  224.    tx = -(right+left) / (right-left);
  225.    ty = -(top+bottom) / (top-bottom);
  226.    tz = -(farval+nearval) / (farval-nearval);
  227.  
  228. #define M(row,col)  m[col*4+row]
  229.    M(0,0) = x;     M(0,1) = 0.0F;  M(0,2) = 0.0F;  M(0,3) = tx;
  230.    M(1,0) = 0.0F;  M(1,1) = y;     M(1,2) = 0.0F;  M(1,3) = ty;
  231.    M(2,0) = 0.0F;  M(2,1) = 0.0F;  M(2,2) = z;     M(2,3) = tz;
  232.    M(3,0) = 0.0F;  M(3,1) = 0.0F;  M(3,2) = 0.0F;  M(3,3) = 1.0F;
  233. #undef M
  234.  
  235.    (*CC->API.MultMatrixf)( CC, m );
  236. }
  237.  
  238.  
  239. void glPassThrough( GLfloat token )
  240. {
  241.    GET_CONTEXT;
  242.    (*CC->API.PassThrough)(CC, token);
  243. }
  244.  
  245.  
  246. void glPixelMapfv( GLenum map, GLint mapsize, const GLfloat *values )
  247. {
  248.    GET_CONTEXT;
  249.    (*CC->API.PixelMapfv)( CC, map, mapsize, values );
  250. }
  251.  
  252.  
  253. void glPixelMapuiv( GLenum map, GLint mapsize, const GLuint *values )
  254. {
  255.    GLfloat fvalues[MAX_PIXEL_MAP_TABLE];
  256.    GLuint i;
  257.    GET_CONTEXT;
  258.  
  259.    if (map==GL_PIXEL_MAP_I_TO_I || map==GL_PIXEL_MAP_S_TO_S) {
  260.       for (i=0;i<mapsize;i++) {
  261.     fvalues[i] = (GLfloat) values[i];
  262.       }
  263.    }
  264.    else {
  265.       for (i=0;i<mapsize;i++) {
  266.     fvalues[i] = UINT_TO_FLOAT( values[i] );
  267.       }
  268.    }
  269.    (*CC->API.PixelMapfv)( CC, map, mapsize, fvalues );
  270. }
  271.  
  272.  
  273.  
  274. void glPixelMapusv( GLenum map, GLint mapsize, const GLushort *values )
  275. {
  276.    GLfloat fvalues[MAX_PIXEL_MAP_TABLE];
  277.    GLuint i;
  278.    GET_CONTEXT;
  279.  
  280.    if (map==GL_PIXEL_MAP_I_TO_I || map==GL_PIXEL_MAP_S_TO_S) {
  281.       for (i=0;i<mapsize;i++) {
  282.     fvalues[i] = (GLfloat) values[i];
  283.       }
  284.    }
  285.    else {
  286.       for (i=0;i<mapsize;i++) {
  287.     fvalues[i] = USHORT_TO_FLOAT( values[i] );
  288.       }
  289.    }
  290.    (*CC->API.PixelMapfv)( CC, map, mapsize, fvalues );
  291. }
  292.  
  293.  
  294. void glPixelStoref( GLenum pname, GLfloat param )
  295. {
  296.    GET_CONTEXT;
  297.    (*CC->API.PixelStorei)( CC, pname, (GLint) param );
  298. }
  299.  
  300.  
  301. void glPixelStorei( GLenum pname, GLint param )
  302. {
  303.    GET_CONTEXT;
  304.    (*CC->API.PixelStorei)( CC, pname, param );
  305. }
  306.  
  307.  
  308. void glPixelTransferf( GLenum pname, GLfloat param )
  309. {
  310.    GET_CONTEXT;
  311.    (*CC->API.PixelTransferf)(CC, pname, param);
  312. }
  313.  
  314.  
  315. void glPixelTransferi( GLenum pname, GLint param )
  316. {
  317.    GET_CONTEXT;
  318.    (*CC->API.PixelTransferf)(CC, pname, (GLfloat) param);
  319. }
  320.  
  321.  
  322. void glPixelZoom( GLfloat xfactor, GLfloat yfactor )
  323. {
  324.    GET_CONTEXT;
  325.    (*CC->API.PixelZoom)(CC, xfactor, yfactor);
  326. }
  327.  
  328.  
  329. void glPointSize( GLfloat size )
  330. {
  331.    GET_CONTEXT;
  332.    (*CC->API.PointSize)(CC, size);
  333. }
  334.  
  335.  
  336. void glPolygonMode( GLenum face, GLenum mode )
  337. {
  338.    GET_CONTEXT;
  339.    (*CC->API.PolygonMode)(CC, face, mode);
  340. }
  341.  
  342.  
  343. void glPolygonOffset( GLfloat factor, GLfloat units )
  344. {
  345.    GET_CONTEXT;
  346.    (*CC->API.PolygonOffset)( CC, factor, units );
  347. }
  348.  
  349.  
  350. void glPolygonStipple( const GLubyte *mask )
  351. {
  352.    GET_CONTEXT;
  353.    (*CC->API.PolygonStipple)(CC, mask);
  354. }
  355.  
  356.  
  357. void glPopAttrib( void )
  358. {
  359.    GET_CONTEXT;
  360.    (*CC->API.PopAttrib)(CC);
  361. }
  362.  
  363.  
  364. void glPopClientAttrib( void )
  365. {
  366.    GET_CONTEXT;
  367.    (*CC->API.PopClientAttrib)(CC);
  368. }
  369.  
  370.  
  371. void glPopMatrix( void )
  372. {
  373.    GET_CONTEXT;
  374.    (*CC->API.PopMatrix)( CC );
  375. }
  376.  
  377.  
  378. void glPopName( void )
  379. {
  380.    GET_CONTEXT;
  381.    (*CC->API.PopName)(CC);
  382. }
  383.  
  384.  
  385. void glPrioritizeTextures( GLsizei n, const GLuint *textures,
  386.                            const GLclampf *priorities )
  387. {
  388.    GET_CONTEXT;
  389.    (*CC->API.PrioritizeTextures)(CC, n, textures, priorities);
  390. }
  391.  
  392.  
  393. void glPushMatrix( void )
  394. {
  395.    GET_CONTEXT;
  396.    (*CC->API.PushMatrix)( CC );
  397. }
  398.  
  399.  
  400. void glRasterPos2d( GLdouble x, GLdouble y )
  401. {
  402.    GET_CONTEXT;
  403.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  404. }
  405.  
  406.  
  407. void glRasterPos2f( GLfloat x, GLfloat y )
  408. {
  409.    GET_CONTEXT;
  410.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  411. }
  412.  
  413.  
  414. void glRasterPos2i( GLint x, GLint y )
  415. {
  416.    GET_CONTEXT;
  417.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  418. }
  419.  
  420.  
  421. void glRasterPos2s( GLshort x, GLshort y )
  422. {
  423.    GET_CONTEXT;
  424.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  425. }
  426.  
  427.  
  428. void glRasterPos3d( GLdouble x, GLdouble y, GLdouble z )
  429. {
  430.    GET_CONTEXT;
  431.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  432. }
  433.  
  434.  
  435. void glRasterPos3f( GLfloat x, GLfloat y, GLfloat z )
  436. {
  437.    GET_CONTEXT;
  438.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  439. }
  440.  
  441.  
  442. void glRasterPos3i( GLint x, GLint y, GLint z )
  443. {
  444.    GET_CONTEXT;
  445.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  446. }
  447.  
  448.  
  449. void glRasterPos3s( GLshort x, GLshort y, GLshort z )
  450. {
  451.    GET_CONTEXT;
  452.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  453. }
  454.  
  455.  
  456. void glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w )
  457. {
  458.    GET_CONTEXT;
  459.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y,
  460.                                (GLfloat) z, (GLfloat) w );
  461. }
  462.  
  463.  
  464. void glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
  465. {
  466.    GET_CONTEXT;
  467.    (*CC->API.RasterPos4f)( CC, x, y, z, w );
  468. }
  469.  
  470.  
  471. void glRasterPos4i( GLint x, GLint y, GLint z, GLint w )
  472. {
  473.    GET_CONTEXT;
  474.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y,
  475.                                (GLfloat) z, (GLfloat) w );
  476. }
  477.  
  478.  
  479. void glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w )
  480. {
  481.    GET_CONTEXT;
  482.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y,
  483.                                (GLfloat) z, (GLfloat) w );
  484. }
  485.  
  486.  
  487. void glRasterPos2dv( const GLdouble *v )
  488. {
  489.    GET_CONTEXT;
  490.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F );
  491. }
  492.  
  493.  
  494. void glRasterPos2fv( const GLfloat *v )
  495. {
  496.    GET_CONTEXT;
  497.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F );
  498. }
  499.  
  500.  
  501. void glRasterPos2iv( const GLint *v )
  502. {
  503.    GET_CONTEXT;
  504.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F );
  505. }
  506.  
  507.  
  508. void glRasterPos2sv( const GLshort *v )
  509. {
  510.    GET_CONTEXT;
  511.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F );
  512. }
  513.  
  514.  
  515. /*** 3 element vector ***/
  516.  
  517. void glRasterPos3dv( const GLdouble *v )
  518. {
  519.    GET_CONTEXT;
  520.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  521.                                (GLfloat) v[2], 1.0F );
  522. }
  523.  
  524.  
  525. void glRasterPos3fv( const GLfloat *v )
  526. {
  527.    GET_CONTEXT;
  528.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  529.                                (GLfloat) v[2], 1.0F );
  530. }
  531.  
  532.  
  533. void glRasterPos3iv( const GLint *v )
  534. {
  535.    GET_CONTEXT;
  536.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  537.                                (GLfloat) v[2], 1.0F );
  538. }
  539.  
  540.  
  541. void glRasterPos3sv( const GLshort *v )
  542. {
  543.    GET_CONTEXT;
  544.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  545.                                (GLfloat) v[2], 1.0F );
  546. }
  547.  
  548.  
  549. void glRasterPos4dv( const GLdouble *v )
  550. {
  551.    GET_CONTEXT;
  552.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  553.                                (GLfloat) v[2], (GLfloat) v[3] );
  554. }
  555.  
  556.  
  557. void glRasterPos4fv( const GLfloat *v )
  558. {
  559.    GET_CONTEXT;
  560.    (*CC->API.RasterPos4f)( CC, v[0], v[1], v[2], v[3] );
  561. }
  562.  
  563.  
  564. void glRasterPos4iv( const GLint *v )
  565. {
  566.    GET_CONTEXT;
  567.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  568.                                (GLfloat) v[2], (GLfloat) v[3] );
  569. }
  570.  
  571.  
  572. void glRasterPos4sv( const GLshort *v )
  573. {
  574.    GET_CONTEXT;
  575.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  576.                                (GLfloat) v[2], (GLfloat) v[3] );
  577. }
  578.  
  579.  
  580. void glReadBuffer( GLenum mode )
  581. {
  582.    GET_CONTEXT;
  583.    (*CC->API.ReadBuffer)( CC, mode );
  584. }
  585.  
  586.  
  587. void glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height,
  588.            GLenum format, GLenum type, GLvoid *pixels )
  589. {
  590.    GET_CONTEXT;
  591.    (*CC->API.ReadPixels)( CC, x, y, width, height, format, type, pixels );
  592. }
  593.  
  594.  
  595. void glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 )
  596. {
  597.    GET_CONTEXT;
  598.    (*CC->API.Rectf)( CC, (GLfloat) x1, (GLfloat) y1,
  599.                     (GLfloat) x2, (GLfloat) y2 );
  600. }
  601.  
  602.  
  603. void glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 )
  604. {
  605.    GET_CONTEXT;
  606.    (*CC->API.Rectf)( CC, x1, y1, x2, y2 );
  607. }
  608.  
  609.  
  610. void glRecti( GLint x1, GLint y1, GLint x2, GLint y2 )
  611. {
  612.    GET_CONTEXT;
  613.    (*CC->API.Rectf)( CC, (GLfloat) x1, (GLfloat) y1,
  614.                          (GLfloat) x2, (GLfloat) y2 );
  615. }
  616.  
  617.  
  618. void glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 )
  619. {
  620.    GET_CONTEXT;
  621.    (*CC->API.Rectf)( CC, (GLfloat) x1, (GLfloat) y1,
  622.                      (GLfloat) x2, (GLfloat) y2 );
  623. }
  624.  
  625.  
  626. void glRectdv( const GLdouble *v1, const GLdouble *v2 )
  627. {
  628.    GET_CONTEXT;
  629.    (*CC->API.Rectf)(CC, (GLfloat) v1[0], (GLfloat) v1[1],
  630.                     (GLfloat) v2[0], (GLfloat) v2[1]);
  631. }
  632.  
  633.  
  634. void glRectfv( const GLfloat *v1, const GLfloat *v2 )
  635. {
  636.    GET_CONTEXT;
  637.    (*CC->API.Rectf)(CC, v1[0], v1[1], v2[0], v2[1]);
  638. }
  639.  
  640.  
  641. void glRectiv( const GLint *v1, const GLint *v2 )
  642. {
  643.    GET_CONTEXT;
  644.    (*CC->API.Rectf)( CC, (GLfloat) v1[0], (GLfloat) v1[1],
  645.                      (GLfloat) v2[0], (GLfloat) v2[1] );
  646. }
  647.  
  648.  
  649. void glRectsv( const GLshort *v1, const GLshort *v2 )
  650. {
  651.    GET_CONTEXT;
  652.    (*CC->API.Rectf)(CC, (GLfloat) v1[0], (GLfloat) v1[1],
  653.         (GLfloat) v2[0], (GLfloat) v2[1]);
  654. }
  655.  
  656.  
  657. void glScissor( GLint x, GLint y, GLsizei width, GLsizei height)
  658. {
  659.    GET_CONTEXT;
  660.    (*CC->API.Scissor)(CC, x, y, width, height);
  661. }
  662.  
  663.  
  664. GLboolean glIsEnabled( GLenum cap )
  665. {
  666.    GET_CONTEXT;
  667.    return (*CC->API.IsEnabled)( CC, cap );
  668. }
  669.  
  670.  
  671.  
  672. void glPushAttrib( GLbitfield mask )
  673. {
  674.    GET_CONTEXT;
  675.    (*CC->API.PushAttrib)(CC, mask);
  676. }
  677.  
  678.  
  679. void glPushClientAttrib( GLbitfield mask )
  680. {
  681.    GET_CONTEXT;
  682.    (*CC->API.PushClientAttrib)(CC, mask);
  683. }
  684.  
  685.  
  686. void glPushName( GLuint name )
  687. {
  688.    GET_CONTEXT;
  689.    (*CC->API.PushName)(CC, name);
  690. }
  691.  
  692.  
  693. GLint glRenderMode( GLenum mode )
  694. {
  695.    GET_CONTEXT;
  696.    return (*CC->API.RenderMode)(CC, mode);
  697. }
  698.  
  699.  
  700. void glRotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z )
  701. {
  702.    GET_CONTEXT;
  703.    (*CC->API.Rotatef)( CC, (GLfloat) angle,
  704.                        (GLfloat) x, (GLfloat) y, (GLfloat) z );
  705. }
  706.  
  707.  
  708. void glRotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z )
  709. {
  710.    GET_CONTEXT;
  711.    (*CC->API.Rotatef)( CC, angle, x, y, z );
  712. }
  713.  
  714.  
  715. void glSelectBuffer( GLsizei size, GLuint *buffer )
  716. {
  717.    GET_CONTEXT;
  718.    (*CC->API.SelectBuffer)(CC, size, buffer);
  719. }
  720.  
  721.  
  722. void glScaled( GLdouble x, GLdouble y, GLdouble z )
  723. {
  724.    GET_CONTEXT;
  725.    (*CC->API.Scalef)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z );
  726. }
  727.  
  728.  
  729. void glScalef( GLfloat x, GLfloat y, GLfloat z )
  730. {
  731.    GET_CONTEXT;
  732.    (*CC->API.Scalef)( CC, x, y, z );
  733. }
  734.  
  735.  
  736. void glShadeModel( GLenum mode )
  737. {
  738.    GET_CONTEXT;
  739.    (*CC->API.ShadeModel)(CC, mode);
  740. }
  741.  
  742.  
  743. void glStencilFunc( GLenum func, GLint ref, GLuint mask )
  744. {
  745.    GET_CONTEXT;
  746.    (*CC->API.StencilFunc)(CC, func, ref, mask);
  747. }
  748.  
  749.  
  750. void glStencilMask( GLuint mask )
  751. {
  752.    GET_CONTEXT;
  753.    (*CC->API.StencilMask)(CC, mask);
  754. }
  755.  
  756.  
  757. void glStencilOp( GLenum fail, GLenum zfail, GLenum zpass )
  758. {
  759.    GET_CONTEXT;
  760.    (*CC->API.StencilOp)(CC, fail, zfail, zpass);
  761. }
  762.  
  763.  
  764. void glTexCoord1d( GLdouble s )
  765. {
  766.    GET_CONTEXT;
  767.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, 0.0, 0.0, 1.0 );
  768. }
  769.  
  770.  
  771. void glTexCoord1f( GLfloat s )
  772. {
  773.    GET_CONTEXT;
  774.    (*CC->API.TexCoord4f)( CC, s, 0.0, 0.0, 1.0 );
  775. }
  776.  
  777.  
  778. void glTexCoord1i( GLint s )
  779. {
  780.    GET_CONTEXT;
  781.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, 0.0, 0.0, 1.0 );
  782. }
  783.  
  784.  
  785. void glTexCoord1s( GLshort s )
  786. {
  787.    GET_CONTEXT;
  788.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, 0.0, 0.0, 1.0 );
  789. }
  790.  
  791.  
  792. void glTexCoord2d( GLdouble s, GLdouble t )
  793. {
  794.    GET_CONTEXT;
  795.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t, 0.0, 1.0 );
  796. }
  797.  
  798.  
  799. void glTexCoord2f( GLfloat s, GLfloat t )
  800. {
  801.    GET_CONTEXT;
  802. #ifdef SHORTCUT
  803.         if (CC->CompileFlag) {
  804.            (*CC->Save.TexCoord4f)( CC, s, t, 0.0F, 1.0F );
  805.            if (CC->ExecuteFlag) {
  806.               CC->Current.TexCoord[0] = s;
  807.               CC->Current.TexCoord[1] = t;
  808.               CC->Current.TexCoord[2] = 0.0F;
  809.               CC->Current.TexCoord[3] = 1.0F;
  810.            }
  811.         }
  812.         else {
  813.            /* Execute */
  814.            GLfloat *tex = CC->Current.TexCoord;
  815.            tex[0] = s;
  816.            tex[1] = t;
  817.            tex[2] = 0.0F;
  818.            tex[3] = 1.0F;
  819.         }
  820. #else
  821.    (*CC->API.TexCoord4f)( CC, s, tex, 0.0, 1.0 );
  822. #endif
  823. }
  824.  
  825.  
  826. void glTexCoord2i( GLint s, GLint t )
  827. {
  828.    GET_CONTEXT;
  829.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t, 0.0, 1.0 );
  830. }
  831.  
  832.  
  833. void glTexCoord2s( GLshort s, GLshort t )
  834. {
  835.    GET_CONTEXT;
  836.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t, 0.0, 1.0 );
  837. }
  838.  
  839.  
  840. void glTexCoord3d( GLdouble s, GLdouble t, GLdouble r )
  841. {
  842.    GET_CONTEXT;
  843.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t, (GLfloat) r, 1.0 );
  844. }
  845.  
  846.  
  847. void glTexCoord3f( GLfloat s, GLfloat t, GLfloat r )
  848. {
  849.    GET_CONTEXT;
  850.    (*CC->API.TexCoord4f)( CC, s, t, r, 1.0 );
  851. }
  852.  
  853.  
  854. void glTexCoord3i( GLint s, GLint t, GLint r )
  855. {
  856.    GET_CONTEXT;
  857.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t,
  858.                                (GLfloat) r, 1.0 );
  859. }
  860.  
  861.  
  862. void glTexCoord3s( GLshort s, GLshort t, GLshort r )
  863. {
  864.    GET_CONTEXT;
  865.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t,
  866.                                (GLfloat) r, 1.0 );
  867. }
  868.  
  869.  
  870. void glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q )
  871. {
  872.    GET_CONTEXT;
  873.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t,
  874.                                (GLfloat) r, (GLfloat) q );
  875. }
  876.  
  877.  
  878. void glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q )
  879. {
  880.    GET_CONTEXT;
  881.    (*CC->API.TexCoord4f)( CC, s, t, r, q );
  882. }
  883.  
  884.  
  885. void glTexCoord4i( GLint s, GLint t, GLint r, GLint q )
  886. {
  887.    GET_CONTEXT;
  888.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t,
  889.                                (GLfloat) r, (GLfloat) q );
  890. }
  891.  
  892.  
  893. void glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q )
  894. {
  895.    GET_CONTEXT;
  896.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t,
  897.                                (GLfloat) r, (GLfloat) q );
  898. }
  899.  
  900.  
  901. void glTexCoord1dv( const GLdouble *v )
  902. {
  903.    GET_CONTEXT;
  904.    (*CC->API.TexCoord4f)( CC, (GLfloat) *v, 0.0, 0.0, 1.0 );
  905. }
  906.  
  907.  
  908. void glTexCoord1fv( const GLfloat *v )
  909. {
  910.    GET_CONTEXT;
  911.    (*CC->API.TexCoord4f)( CC, *v, 0.0, 0.0, 1.0 );
  912. }
  913.  
  914.  
  915. void glTexCoord1iv( const GLint *v )
  916. {
  917.    GET_CONTEXT;
  918.    (*CC->API.TexCoord4f)( CC, *v, 0.0, 0.0, 1.0 );
  919. }
  920.  
  921.  
  922. void glTexCoord1sv( const GLshort *v )
  923. {
  924.    GET_CONTEXT;
  925.    (*CC->API.TexCoord4f)( CC, (GLfloat) *v, 0.0, 0.0, 1.0 );
  926. }
  927.  
  928.  
  929. void glTexCoord2dv( const GLdouble *v )
  930. {
  931.    GET_CONTEXT;
  932.    (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0, 1.0 );
  933. }
  934.  
  935.  
  936. void glTexCoord2fv( const GLfloat *v )
  937. {
  938.    GET_CONTEXT;
  939.    (*CC->API.TexCoord4f)( CC, v[0], v[1], 0.0, 1.0 );
  940. }
  941.  
  942.  
  943. void glTexCoord2iv( const GLint *v )
  944. {
  945.    GET_CONTEXT;
  946.    (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0, 1.0 );
  947. }
  948.  
  949.  
  950. void glTexCoord2sv( const GLshort *v )
  951. {
  952.    GET_CONTEXT;
  953.    (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0, 1.0 );
  954. }
  955.  
  956.  
  957. void glTexCoord3dv( const GLdouble *v )
  958. {
  959.    GET_CONTEXT;
  960.    (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  961.                                (GLfloat) v[2], 1.0 );
  962. }
  963.  
  964.  
  965. void glTexCoord3fv( const GLfloat *v )
  966. {
  967.    GET_CONTEXT;
  968.    (*CC->API.TexCoord4f)( CC, v[0], v[1], v[2], 1.0 );
  969. }
  970.  
  971.  
  972. void glTexCoord3iv( const GLint *v )
  973. {
  974.    GET_CONTEXT;
  975.    (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  976.                           (GLfloat) v[2], 1.0 );
  977. }
  978.  
  979.  
  980. void glTexCoord3sv( const GLshort *v )
  981. {
  982.    GET_CONTEXT;
  983.    (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  984.                                (GLfloat) v[2], 1.0 );
  985. }
  986.  
  987.  
  988. void glTexCoord4dv( const GLdouble *v )
  989. {
  990.    GET_CONTEXT;
  991.    (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  992.                                (GLfloat) v[2], (GLfloat) v[3] );
  993. }
  994.  
  995.  
  996. void glTexCoord4fv( const GLfloat *v )
  997. {
  998.    GET_CONTEXT;
  999.    (*CC->API.TexCoord4f)( CC, v[0], v[1], v[2], v[3] );
  1000. }
  1001.  
  1002.  
  1003. void glTexCoord4iv( const GLint *v )
  1004. {
  1005.    GET_CONTEXT;
  1006.    (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  1007.                                (GLfloat) v[2], (GLfloat) v[3] );
  1008. }
  1009.  
  1010.  
  1011. void glTexCoord4sv( const GLshort *v )
  1012. {
  1013.    GET_CONTEXT;
  1014.    (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  1015.                                (GLfloat) v[2], (GLfloat) v[3] );
  1016. }
  1017.  
  1018.  
  1019. void glTexCoordPointer( GLint size, GLenum type, GLsizei stride,
  1020.                         const GLvoid *ptr )
  1021. {
  1022.    GET_CONTEXT;
  1023.    (*CC->API.TexCoordPointer)(CC, size, type, stride, ptr);
  1024. }
  1025.  
  1026.  
  1027. void glTexGend( GLenum coord, GLenum pname, GLdouble param )
  1028. {
  1029.    GLfloat p = (GLfloat) param;
  1030.    GET_CONTEXT;
  1031.    (*CC->API.TexGenfv)( CC, coord, pname, &p );
  1032. }
  1033.  
  1034.  
  1035. void glTexGenf( GLenum coord, GLenum pname, GLfloat param )
  1036. {
  1037.    GET_CONTEXT;
  1038.    (*CC->API.TexGenfv)( CC, coord, pname, ¶m );
  1039. }
  1040.  
  1041.  
  1042. void glTexGeni( GLenum coord, GLenum pname, GLint param )
  1043. {
  1044.    GLfloat p = (GLfloat) param;
  1045.    GET_CONTEXT;
  1046.    (*CC->API.TexGenfv)( CC, coord, pname, &p );
  1047. }
  1048.  
  1049.  
  1050. void glTexGendv( GLenum coord, GLenum pname, const GLdouble *params )
  1051. {
  1052.    GLfloat p[4];
  1053.    GET_CONTEXT;
  1054.    p[0] = params[0];
  1055.    p[1] = params[1];
  1056.    p[2] = params[2];
  1057.    p[3] = params[3];
  1058.    (*CC->API.TexGenfv)( CC, coord, pname, p );
  1059. }
  1060.  
  1061.  
  1062. void glTexGeniv( GLenum coord, GLenum pname, const GLint *params )
  1063. {
  1064.    GLfloat p[4];
  1065.    GET_CONTEXT;
  1066.    p[0] = params[0];
  1067.    p[1] = params[1];
  1068.    p[2] = params[2];
  1069.    p[3] = params[3];
  1070.    (*CC->API.TexGenfv)( CC, coord, pname, p );
  1071. }
  1072.  
  1073.  
  1074. void glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params )
  1075. {
  1076.    GET_CONTEXT;
  1077.    (*CC->API.TexGenfv)( CC, coord, pname, params );
  1078. }
  1079.  
  1080.  
  1081.  
  1082.  
  1083. void glTexEnvf( GLenum target, GLenum pname, GLfloat param )
  1084. {
  1085.    GET_CONTEXT;
  1086.    (*CC->API.TexEnvfv)( CC, target, pname, ¶m );
  1087. }
  1088.  
  1089.  
  1090.  
  1091. void glTexEnvi( GLenum target, GLenum pname, GLint param )
  1092. {
  1093.    GLfloat p = (GLfloat) param;
  1094.    GET_CONTEXT;
  1095.    (*CC->API.TexEnvfv)( CC, target, pname, &p );
  1096. }
  1097.  
  1098.  
  1099.  
  1100. void glTexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
  1101. {
  1102.    GET_CONTEXT;
  1103.    (*CC->API.TexEnvfv)( CC, target, pname, param );
  1104. }
  1105.  
  1106.  
  1107.  
  1108. void glTexEnviv( GLenum target, GLenum pname, const GLint *param )
  1109. {
  1110.    GLfloat p[4];
  1111.    GET_CONTEXT;
  1112.    p[0] = INT_TO_FLOAT( param[0] );
  1113.    p[1] = INT_TO_FLOAT( param[1] );
  1114.    p[2] = INT_TO_FLOAT( param[2] );
  1115.    p[3] = INT_TO_FLOAT( param[3] );
  1116.    (*CC->API.TexEnvfv)( CC, target, pname, p );
  1117. }
  1118.  
  1119.  
  1120. void glTexImage1D( GLenum target, GLint level, GLint internalformat,
  1121.                    GLsizei width, GLint border,
  1122.                    GLenum format, GLenum type, const GLvoid *pixels )
  1123. {
  1124.    struct gl_texture_image *teximage;
  1125.    GET_CONTEXT;
  1126.    teximage = gl_unpack_texture( CC, 1, target, level, internalformat,
  1127.                                  width, 1, border, format, type, pixels );
  1128.    (*CC->API.TexImage1D)( CC, target, level, internalformat,
  1129.                           width, border, format, type, teximage );
  1130. }
  1131.  
  1132.  
  1133.  
  1134. void glTexImage2D( GLenum target, GLint level, GLint internalformat,
  1135.                    GLsizei width, GLsizei height, GLint border,
  1136.                    GLenum format, GLenum type, const GLvoid *pixels )
  1137. {
  1138.    struct gl_texture_image *teximage;
  1139.    GET_CONTEXT;
  1140.    teximage = gl_unpack_texture( CC, 2, target, level, internalformat,
  1141.                                  width, height, border, format, type, pixels );
  1142.    (*CC->API.TexImage2D)( CC, target, level, internalformat,
  1143.                           width, height, border, format, type, teximage );
  1144. }
  1145.  
  1146.  
  1147. void glTexParameterf( GLenum target, GLenum pname, GLfloat param )
  1148. {
  1149.    GET_CONTEXT;
  1150.    (*CC->API.TexParameterfv)( CC, target, pname, ¶m );
  1151. }
  1152.  
  1153.  
  1154. void glTexParameteri( GLenum target, GLenum pname, GLint param )
  1155. {
  1156.    GLfloat fparam = param;
  1157.    GET_CONTEXT;
  1158.    (*CC->API.TexParameterfv)( CC, target, pname, &fparam );
  1159. }
  1160.  
  1161.  
  1162. void glTexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
  1163. {
  1164.    GET_CONTEXT;
  1165.    (*CC->API.TexParameterfv)( CC, target, pname, params );
  1166. }
  1167.  
  1168.  
  1169. void glTexParameteriv( GLenum target, GLenum pname, const GLint *params )
  1170. {
  1171.    GLfloat p[4];
  1172.    GET_CONTEXT;
  1173.    if (pname==GL_TEXTURE_BORDER_COLOR) {
  1174.       p[0] = INT_TO_FLOAT( params[0] );
  1175.       p[1] = INT_TO_FLOAT( params[1] );
  1176.       p[2] = INT_TO_FLOAT( params[2] );
  1177.       p[3] = INT_TO_FLOAT( params[3] );
  1178.    }
  1179.    else {
  1180.       p[0] = (GLfloat) params[0];
  1181.       p[1] = (GLfloat) params[1];
  1182.       p[2] = (GLfloat) params[2];
  1183.       p[3] = (GLfloat) params[3];
  1184.    }
  1185.    (*CC->API.TexParameterfv)( CC, target, pname, p );
  1186. }
  1187.  
  1188.  
  1189. void glTexSubImage1D( GLenum target, GLint level, GLint xoffset,
  1190.                       GLsizei width, GLenum format,
  1191.                       GLenum type, const GLvoid *pixels )
  1192. {
  1193.    struct gl_image *image;
  1194.    GET_CONTEXT;
  1195.    image = gl_unpack_texsubimage( CC, width, 1, format, type, pixels );
  1196.    (*CC->API.TexSubImage1D)( CC, target, level, xoffset, width,
  1197.                              format, type, image );
  1198. }
  1199.  
  1200.  
  1201. void glTexSubImage2D( GLenum target, GLint level,
  1202.                       GLint xoffset, GLint yoffset,
  1203.                       GLsizei width, GLsizei height,
  1204.                       GLenum format, GLenum type,
  1205.                       const GLvoid *pixels )
  1206. {
  1207.    struct gl_image *image;
  1208.    GET_CONTEXT;
  1209.    image = gl_unpack_texsubimage( CC, width, height, format, type, pixels );
  1210.    (*CC->API.TexSubImage2D)( CC, target, level, xoffset, yoffset,
  1211.                              width, height, format, type, image );
  1212. }
  1213.  
  1214.  
  1215. void glTranslated( GLdouble x, GLdouble y, GLdouble z )
  1216. {
  1217.    GET_CONTEXT;
  1218.    (*CC->API.Translatef)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z );
  1219. }
  1220.  
  1221.  
  1222. void glTranslatef( GLfloat x, GLfloat y, GLfloat z )
  1223. {
  1224.    GET_CONTEXT;
  1225.    (*CC->API.Translatef)( CC, x, y, z );
  1226. }
  1227.  
  1228.  
  1229. void glVertex2d( GLdouble x, GLdouble y )
  1230. {
  1231.    GET_CONTEXT;
  1232.    (*CC->API.Vertex4f)( CC, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  1233. }
  1234.  
  1235.  
  1236. void glVertex2f( GLfloat x, GLfloat y )
  1237. {
  1238.    GET_CONTEXT;
  1239.    (*CC->API.Vertex4f)( CC, x, y, 0.0F, 1.0F );
  1240. }
  1241.  
  1242.  
  1243. void glVertex2i( GLint x, GLint y )
  1244. {
  1245.    GET_CONTEXT;
  1246.    (*CC->API.Vertex4f)( CC, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  1247. }
  1248.  
  1249.  
  1250. void glVertex2s( GLshort x, GLshort y )
  1251. {
  1252.    GET_CONTEXT;
  1253.    (*CC->API.Vertex4f)( CC, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  1254. }
  1255.  
  1256.  
  1257. void glVertex3d( GLdouble x, GLdouble y, GLdouble z )
  1258. {
  1259.    GET_CONTEXT;
  1260.    (*CC->API.Vertex4f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  1261. }
  1262.  
  1263.  
  1264. void glVertex3f( GLfloat x, GLfloat y, GLfloat z )
  1265. {
  1266.    GET_CONTEXT;
  1267.    (*CC->API.Vertex4f)( CC, x, y, z, 1.0F );
  1268. }
  1269.  
  1270.  
  1271. void glVertex3i( GLint x, GLint y, GLint z )
  1272. {
  1273.    GET_CONTEXT;
  1274.    (*CC->API.Vertex4f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  1275. }
  1276.  
  1277.  
  1278. void glVertex3s( GLshort x, GLshort y, GLshort z )
  1279. {
  1280.    GET_CONTEXT;
  1281.    (*CC->API.Vertex4f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  1282. }
  1283.  
  1284.  
  1285. void glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w )
  1286. {
  1287.    GET_CONTEXT;
  1288.    (*CC->API.Vertex4f)( CC, (GLfloat) x, (GLfloat) y,
  1289.                             (GLfloat) z, (GLfloat) w );
  1290. }
  1291.  
  1292.  
  1293. void glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
  1294. {
  1295.    GET_CONTEXT;
  1296.    (*CC->API.Vertex4f)( CC, x, y, z, w );
  1297. }
  1298.  
  1299.  
  1300. void glVertex4i( GLint x, GLint y, GLint z, GLint w )
  1301. {
  1302.    GET_CONTEXT;
  1303.    (*CC->API.Vertex4f)( CC, (GLfloat) x, (GLfloat) y,
  1304.                             (GLfloat) z, (GLfloat) w );
  1305. }
  1306.  
  1307.  
  1308. void glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w )
  1309. {
  1310.    GET_CONTEXT;
  1311.    (*CC->API.Vertex4f)( CC, (GLfloat) x, (GLfloat) y,
  1312.                             (GLfloat) z, (GLfloat) w );
  1313. }
  1314.  
  1315.  
  1316. void glVertex2dv( const GLdouble *v )
  1317. {
  1318.    GET_CONTEXT;
  1319.    (*CC->API.Vertex4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F );
  1320. }
  1321.  
  1322.  
  1323. void glVertex2fv( const GLfloat *v )
  1324. {
  1325.    GET_CONTEXT;
  1326.    (*CC->API.Vertex4f)( CC, v[0], v[1], 0.0F, 1.0F );
  1327. }
  1328.  
  1329.  
  1330. void glVertex2iv( const GLint *v )
  1331. {
  1332.    GET_CONTEXT;
  1333.    (*CC->API.Vertex4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F );
  1334. }
  1335.  
  1336.  
  1337. void glVertex2sv( const GLshort *v )
  1338. {
  1339.    GET_CONTEXT;
  1340.    (*CC->API.Vertex4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F );
  1341. }
  1342.  
  1343.  
  1344. void glVertex3dv( const GLdouble *v )
  1345. {
  1346.    GET_CONTEXT;
  1347.    (*CC->API.Vertex4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  1348.                             (GLfloat) v[2], 1.0F );
  1349. }
  1350.  
  1351.  
  1352. void glVertex3fv( const GLfloat *v )
  1353. {
  1354.    GET_CONTEXT;
  1355.    (*CC->API.Vertex4f)( CC, v[0], v[1], v[2], 1.0F );
  1356. }
  1357.  
  1358.  
  1359. void glVertex3iv( const GLint *v )
  1360. {
  1361.    GET_CONTEXT;
  1362.    (*CC->API.Vertex4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  1363.                             (GLfloat) v[2], 1.0F );
  1364. }
  1365.  
  1366.  
  1367. void glVertex3sv( const GLshort *v )
  1368. {
  1369.    GET_CONTEXT;
  1370.    (*CC->API.Vertex4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  1371.                             (GLfloat) v[2], 1.0F );
  1372. }
  1373.  
  1374.  
  1375. void glVertex4dv( const GLdouble *v )
  1376. {
  1377.    GET_CONTEXT;
  1378.    (*CC->API.Vertex4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  1379.                             (GLfloat) v[2], (GLfloat) v[3] );
  1380. }
  1381.  
  1382.  
  1383. void glVertex4fv( const GLfloat *v )
  1384. {
  1385.    GET_CONTEXT;
  1386.    (*CC->API.Vertex4f)( CC, v[0], v[1], v[2], v[3] );
  1387. }
  1388.  
  1389.  
  1390. void glVertex4iv( const GLint *v )
  1391. {
  1392.    GET_CONTEXT;
  1393.    (*CC->API.Vertex4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  1394.                   (GLfloat) v[2], (GLfloat) v[3] );
  1395. }
  1396.  
  1397.  
  1398. void glVertex4sv( const GLshort *v )
  1399. {
  1400.    GET_CONTEXT;
  1401.    (*CC->API.Vertex4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  1402.                             (GLfloat) v[2], (GLfloat) v[3] );
  1403. }
  1404.  
  1405.  
  1406. void glVertexPointer( GLint size, GLenum type, GLsizei stride,
  1407.                       const GLvoid *ptr )
  1408. {
  1409.    GET_CONTEXT;
  1410.    (*CC->API.VertexPointer)(CC, size, type, stride, ptr);
  1411. }
  1412.  
  1413.  
  1414. void glViewport( GLint x, GLint y, GLsizei width, GLsizei height )
  1415. {
  1416. //    printf("glViewport(...) inside api \n");
  1417.    GET_CONTEXT;
  1418.    (*CC->API.Viewport)( CC, x, y, width, height );
  1419. //    printf("glViewport(...) inside api done\n");
  1420.  
  1421. }
  1422.  
  1423.  
  1424.  
  1425. /**
  1426.  ** Extensions
  1427.  **
  1428.  ** Some of these are incorporated into the 1.1 API.  They also remain as
  1429.  ** extensions for backward compatibility.  Should be removed in the future.
  1430.  **/
  1431.  
  1432.  
  1433. /* GL_EXT_blend_minmax */
  1434.  
  1435. void glBlendEquationEXT( GLenum mode )
  1436. {
  1437.    GET_CONTEXT;
  1438.    (*CC->API.BlendEquation)(CC, mode);
  1439. }
  1440.  
  1441.  
  1442. /* GL_EXT_blend_color */
  1443.  
  1444. void glBlendColorEXT( GLclampf red, GLclampf green,
  1445.                       GLclampf blue, GLclampf alpha )
  1446. {
  1447.    GET_CONTEXT;
  1448.    (*CC->API.BlendColor)(CC, red, green, blue, alpha);
  1449. }
  1450.  
  1451.  
  1452. /* GL_EXT_vertex_array */
  1453. /* TOOD: verify these work */
  1454. void glVertexPointerEXT( GLint size, GLenum type, GLsizei stride,
  1455.                          GLsizei count, const GLvoid *ptr )
  1456. {
  1457.    GET_CONTEXT;
  1458.    (*CC->API.VertexPointer)(CC, size, type, stride, ptr);
  1459. }
  1460.  
  1461.  
  1462. void glNormalPointerEXT( GLenum type, GLsizei stride, GLsizei count,
  1463.                          const GLvoid *ptr )
  1464. {
  1465.    GET_CONTEXT;
  1466.    (*CC->API.NormalPointer)(CC, type, stride, ptr);
  1467. }
  1468.  
  1469.  
  1470. void glColorPointerEXT( GLint size, GLenum type, GLsizei stride,
  1471.                         GLsizei count, const GLvoid *ptr )
  1472. {
  1473.    GET_CONTEXT;
  1474.    (*CC->API.ColorPointer)(CC, size, type, stride, ptr);
  1475. }
  1476.  
  1477.  
  1478. void glIndexPointerEXT( GLenum type, GLsizei stride,
  1479.                         GLsizei count, const GLvoid *ptr )
  1480. {
  1481.    GET_CONTEXT;
  1482.    (*CC->API.IndexPointer)(CC, type, stride, ptr);
  1483. }
  1484.  
  1485.  
  1486. void glTexCoordPointerEXT( GLint size, GLenum type, GLsizei stride,
  1487.                            GLsizei count, const GLvoid *ptr )
  1488. {
  1489.    GET_CONTEXT;
  1490.    (*CC->API.TexCoordPointer)(CC, size, type, stride, ptr);
  1491. }
  1492.  
  1493.  
  1494. void glEdgeFlagPointerEXT( GLsizei stride, GLsizei count,
  1495.                            const GLboolean *ptr )
  1496. {
  1497.    GET_CONTEXT;
  1498.    (*CC->API.EdgeFlagPointer)(CC, stride, ptr);
  1499. }
  1500.  
  1501.  
  1502. void glGetPointervEXT( GLenum pname, GLvoid **params )
  1503. {
  1504.    GET_CONTEXT;
  1505.    (*CC->API.GetPointerv)(CC, pname, params);
  1506. }
  1507.  
  1508.  
  1509. void glArrayElementEXT( GLint i )
  1510. {
  1511.    GET_CONTEXT;
  1512.    (*CC->API.ArrayElement)(CC, i);
  1513. }
  1514.  
  1515.  
  1516. void glDrawArraysEXT( GLenum mode, GLint first, GLsizei count )
  1517. {
  1518.    GET_CONTEXT;
  1519.    (*CC->API.DrawArrays)(CC, mode, first, count);
  1520. }
  1521.  
  1522.  
  1523.  
  1524.  
  1525.  
  1526. #ifdef GL_MESA_window_pos
  1527. /*
  1528.  * Mesa implementation of glWindowPos*MESA()
  1529.  */
  1530. void glWindowPos4fMESA( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
  1531. {
  1532.    GET_CONTEXT;
  1533.    (*CC->API.WindowPos4fMESA)( CC, x, y, z, w );
  1534. }
  1535. #else
  1536. /* Implementation in winpos.c is used */
  1537. #endif
  1538.  
  1539.  
  1540. void glWindowPos2iMESA( GLint x, GLint y )
  1541. {
  1542.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  1543. }
  1544.  
  1545. void glWindowPos2sMESA( GLshort x, GLshort y )
  1546. {
  1547.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  1548. }
  1549.  
  1550. void glWindowPos2fMESA( GLfloat x, GLfloat y )
  1551. {
  1552.    glWindowPos4fMESA( x, y, 0.0F, 1.0F );
  1553. }
  1554.  
  1555. void glWindowPos2dMESA( GLdouble x, GLdouble y )
  1556. {
  1557.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  1558. }
  1559.  
  1560. void glWindowPos2ivMESA( const GLint *p )
  1561. {
  1562.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1], 0.0F, 1.0F );
  1563. }
  1564.  
  1565. void glWindowPos2svMESA( const GLshort *p )
  1566. {
  1567.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1], 0.0F, 1.0F );
  1568. }
  1569.  
  1570. void glWindowPos2fvMESA( const GLfloat *p )
  1571. {
  1572.    glWindowPos4fMESA( p[0], p[1], 0.0F, 1.0F );
  1573. }
  1574.  
  1575. void glWindowPos2dvMESA( const GLdouble *p )
  1576. {
  1577.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1], 0.0F, 1.0F );
  1578. }
  1579.  
  1580. void glWindowPos3iMESA( GLint x, GLint y, GLint z )
  1581. {
  1582.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  1583. }
  1584.  
  1585. void glWindowPos3sMESA( GLshort x, GLshort y, GLshort z )
  1586. {
  1587.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  1588. }
  1589.  
  1590. void glWindowPos3fMESA( GLfloat x, GLfloat y, GLfloat z )
  1591. {
  1592.    glWindowPos4fMESA( x, y, z, 1.0F );
  1593. }
  1594.  
  1595. void glWindowPos3dMESA( GLdouble x, GLdouble y, GLdouble z )
  1596. {
  1597.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  1598. }
  1599.  
  1600. void glWindowPos3ivMESA( const GLint *p )
  1601. {
  1602.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1], (GLfloat) p[2], 1.0F );
  1603. }
  1604.  
  1605. void glWindowPos3svMESA( const GLshort *p )
  1606. {
  1607.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1], (GLfloat) p[2], 1.0F );
  1608. }
  1609.  
  1610. void glWindowPos3fvMESA( const GLfloat *p )
  1611. {
  1612.    glWindowPos4fMESA( p[0], p[1], p[2], 1.0F );
  1613. }
  1614.  
  1615. void glWindowPos3dvMESA( const GLdouble *p )
  1616. {
  1617.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1], (GLfloat) p[2], 1.0F );
  1618. }
  1619.  
  1620. void glWindowPos4iMESA( GLint x, GLint y, GLint z, GLint w )
  1621. {
  1622.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w );
  1623. }
  1624.  
  1625. void glWindowPos4sMESA( GLshort x, GLshort y, GLshort z, GLshort w )
  1626. {
  1627.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w );
  1628. }
  1629.  
  1630. void glWindowPos4dMESA( GLdouble x, GLdouble y, GLdouble z, GLdouble w )
  1631. {
  1632.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w );
  1633. }
  1634.  
  1635.  
  1636. void glWindowPos4ivMESA( const GLint *p )
  1637. {
  1638.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1],
  1639.                       (GLfloat) p[2], (GLfloat) p[3] );
  1640. }
  1641.  
  1642. void glWindowPos4svMESA( const GLshort *p )
  1643. {
  1644.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1],
  1645.                       (GLfloat) p[2], (GLfloat) p[3] );
  1646. }
  1647.  
  1648. void glWindowPos4fvMESA( const GLfloat *p )
  1649. {
  1650.    glWindowPos4fMESA( p[0], p[1], p[2], p[3] );
  1651. }
  1652.  
  1653. void glWindowPos4dvMESA( const GLdouble *p )
  1654. {
  1655.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1],
  1656.                       (GLfloat) p[2], (GLfloat) p[3] );
  1657. }
  1658.  
  1659.